Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

261
Views
¿El parámetro "opcional" de @ManyToOne se configura automáticamente usando la nulabilidad de Kotlin?

Leí que especificar optional = false en la anotación de asociación @ManyToOne podría ayudar a Spring a mejorar el rendimiento de las consultas.

En una entidad de clase de datos de Kotlin, ¿realmente necesito especificar el parámetro en la anotación, o Spring puede resolver esto por sí mismo usando la nulabilidad del campo del item ?

Por ejemplo, si tengo la siguiente declaración:

 @Entity @Table(name = ACCESS_LOGS_ARCHIVES_TABLE, indexes = [ Index(name = "access_logs_archives_item_idx", columnList = "access_item_id") ]) data class AccessLogArchive( val date: LocalDate, @ManyToOne(optional = false) @JoinColumn(name = "access_item_id", nullable = false) val item: AccessLogItem, val occurrences: Int ) { @Id @GeneratedValue var id: Long? = null } @Entity @Table(name = ACCESS_ITEMS_TABLE) data class AccessLogItem( @Column(length = 3) val code: String, @Column(columnDefinition = "text") val path: String, @Column(length = 10) val verb: String ) { @Id @GeneratedValue var id: Long? = null }

En este caso, por ejemplo, esperaría que Spring supiera que el campo del item no admite valores NULL y, por lo tanto, la relación debe entenderse como optional=false , incluso sin especificarlo como lo hice yo. ¿Es este el caso?

La misma pregunta se aplica a @JoinColumn 's nullable nullable = false , por cierto.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Considere una entidad simple como Room que tiene una relación @ManyToOne con House .

 @Entity class Room( @ManyToOne(optional = true) val house: House ) { @Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0 }

JPA creará una mesa de sala con una columna.

 `house_id` bigint(20) DEFAULT NULL

Si especifica @ManyToOne(optional = false)

la columna se verá así:

 `house_id` bigint(20) NOT NULL

Al especificar opcional, le dice a JPA cómo se debe generar el esquema, si la columna puede ser NULL o no.

En el tiempo de ejecución, intentar cargar una Room sin una House provocará una excepción si la propiedad de la casa no admite valores NULL (¿ House en lugar de House? ), incluso cuando el valor de optional es true .

Lo mismo se aplica a @JoinColumn .

¿El parámetro "opcional" de @ManyToOne se configura automáticamente usando la nulabilidad de Kotlin?

No, no es. Es independiente de eso y por defecto se establece en true .

Conclusión: para que su esquema refleje sus entidades, es una buena idea usar optional = true si la propiedad de la casa sería anulable y optional = false si la propiedad de la casa no fuera anulable.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!